浅谈pytorch中为什么要用zero 您所在的位置:网站首页 pytorch 梯度累加 浅谈pytorch中为什么要用zero

浅谈pytorch中为什么要用zero

#浅谈pytorch中为什么要用zero| 来源: 网络整理| 查看: 265

浅谈

pytorch

中为什么要⽤

zero_grad

()将梯度清零

pytorch

中为什么要⽤

 zero_grad() 

将梯度清零

调⽤

backward()

函数之前都要将梯度清零,因为如果梯度不清零,

pytorch

中会将上次计算的梯度和本次计算的梯度累加。

这样逻辑的好处是,当我们的硬件限制不能使⽤更⼤的

bachsize

时,使⽤多次计算较⼩的

bachsize

的梯度平均值来代替,更⽅

便,坏处当然是每次都要清零梯度。

optimizer.zero_grad()

output = net(input)

loss = loss_f(output, target)

loss.backward()

补充:

Pytorch 

为什么每⼀轮

batch

需要设置

optimizer.zero_grad

CSDN

上有⼈写过原因,但是其实写得繁琐了。

根据

pytorch

中的

backward()

函数的计算,当⽹络参量进⾏反馈时,梯度是被积累的⽽不是被替换掉;但是在每⼀个

batch

时毫

⽆疑问并不需要将两个

batch

的梯度混合起来累积,因此这⾥就需要每个

batch

设置⼀遍

zero_grad 

了。

其实这⾥还可以补充的⼀点是,如果不是每⼀个

batch

就清除掉原有的梯度,⽽是⽐如说两个

batch

再清除掉梯度,这是⼀种变

相提⾼

batch_size

的⽅法,对于计算机硬件不⾏,但是

batch_size

可能需要设⾼的领域⽐较适合,⽐如⽬标检测模型的训练。

关于这⼀点可以

关于

backward()

的计算可以

补充:

pytorch 

踩坑笔记之

w.grad.data.zero_()

在使⽤

pytorch

实现多项线性回归中,在

grad

更新时,每⼀次运算后都需要将上⼀次的梯度记录清空,运⽤如下⽅法

:

w.grad.data.zero_()

b.grad.data.zero_() 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有